<?php
/**
 * moodledb
 * Класс, работающий с БД
 */
class moodledb 
{
	/**
	 *  хранилище для глобальной переменной $DB
	 */
	private $DB;
	/*
	 * конструктор
	 */
	function __construct($DB) {
		$this->db = $DB;		
	}
	/*
	 * get_messages
	 * функция для получения всех сообщений гостевой книги
	 */
	function get_messages() {
		//указывает таблицу из которой берем сообщения и сортировку
		$table = "block_guestbook_messages";
		$sort = "actual_date DESC";
		//получаем объект с сообщениями
		$obj = $this->db->get_records($table, null, $sort); 
		if($obj != false){
			return $obj;
		} else {
			return false;
		}
	}
	/**
	 * get_comments
	 * функция получения всех комментариев к данному сообщению
	 * @param int id идентификатор сообщения
	 */
	function get_comments($id) {
		//указываем таблицу, параметры запроса
		$table = "block_guestbook_comments";
		$conditions = array("message_id" => $id);
		$sort = "comment_date";
		//получаем объект с комментариями
		$obj = $this->db->get_records($table, $conditions, $sort); 
		if($obj != false){
			return $obj;
		} else {
			return false;
		}
	}
	/**
	 * get_message
	 * функция получения сообщения или комментария из бд
	 */
	function get_message($tbl_name, $id) {
		//указываем таблицу и параметры запроса
		$table = "block_guestbook_".$tbl_name;
		$conditions = array("id" => $id);
		//получаем объект с сообщением
		$obj=  $this->db->get_record($table, $conditions); 
		if($obj != false){
			return $obj;
		} else {
			return false;
		}
	}
	/**
	 * edit
	 * функция редактирования записи в бд
	 * @param string tbl_name имя таблицы
	 * @param int id идентификатор редактируемой записи
	 * @param string text обновленный текст
	 */
	function edit($tbl_name, $id, $text) {
		//безопасность записываемого текста
		$text = addslashes($text);
		//создание объекта для перезаписи в бд
		$obj = new object();
		$obj->id = $id;
		$obj->text = $text;
		//указываем таблицу в которой нужно обновить запись
		$table = "block_guestbook_".$tbl_name;
		$res = $this->db->update_record($table, $obj);
		if($res != false){
			return true;
		} else {
			return false;
		}
	}
	/**
	 * add_message
	 * функция добавление записи в бд
	 * @param string text текст записи
	 * @param int id если указан - записываем комментарий, если нет - записываем сообщение
	 */
	function add_message($text, $id = NULL) 
	{
		//время
	    $date = mktime();
	    //обеспечиваем безопасность строки
	    $text = addslashes($text);
	    //если id не указан записываем сообщение
		if( $id === NULL )
		{
			//таблица с сообщениями
			$table = "block_guestbook_messages";
			//создем объект для записи
			$obj = new object();
			$obj->id = null;
			$obj->text = $text;
			$obj->message_date = $date;
			$obj->actual_date = $date; 
			//пишем
			$res = $this->db->insert_record($table, $obj);
			if($res){
				return true;
			} else {
				return false;
			}
		}
		else
		{
			//таблица с комментами
			$table = "block_guestbook_comments";
			//создаем объект для записи
			$obj = new object();
			$obj->id = null;
			$obj->message_id = $id;
			$obj->text = $text;
			$obj->comment_date = $date;
			//пишем
			$this->db->insert_record($table, $obj);
			//теперь обновляем актуальную дату откомментированного сообщения
			//таблица с сообщениями
			$table = "block_guestbook_messages";
			//создаем объект с новой датой и идентификатором сообщения
			$obj = new object();
			$obj->actual_date = $date;
			$obj->id = $id;
			//обновляем
			$res = $this->db->update_record($table, $obj);
			if($res){
				return true;
			} else {
				return false;
			}
		}
	}
	/**
	 * delete
	 * функция удаления записи из бд
	 * @param string tbl_name имя табилцы
	 * @param int id идентификатор удаляемой записи
	 */
	function delete($tbl_name, $id) {
		//выбор действий в зависимости от таблицы из которой следует удалять
	       switch($tbl_name)
	      	   {//В случае удаления сообщения, так же следует удалить и все комментарии к нему
	    	   		case "messages":
	    		    	//таблица с сообщениями
						$table = "block_guestbook_messages";
						//параметры запроса
						$conditions = array('id' => $id);
						//удаляем
						$this->db->delete_records($table, $conditions);
						//запрос на удаление комментариев
						$table = "block_guestbook_comments";
						$conditions = array('message_id' => $id);
						$res = $this->db->delete_records($table, $conditions);
						if($res){
							return true;
						}else{
							return false;
						}
	    	   		break;
	    	   		//В случае удаления комментария, удаляем только сам комментарий
	    	   		case "comments":
	    		    	//формирование текста запроса на удаление комментария
						$table = "block_guestbook_comments";
						$conditions = array('id' => $id);
						$res = $this->db->delete_records($table, $conditions);
						if($res){
							return true;
						}else{
							return false;
						}
	    	  	 	break;
	        	}
	}
	/**
	 * add_comment
	 * функция записи комментария
	 * @param string text текст комментария
	 * @param int id идентификатор комментируемого сообщения
	 */
	function add_comment($text, $id) {
	    //получение даты и времени момента вызова функции
        $date = mktime();
        //безопасность строки
        $text = addslashes($text);
        //таблица с комментариями
        $table = "block_guestbook_comments";
		//создаем объект для записи в бд
		$obj = new object();
		$obj->message_id = $id;
		$obj->id = null;
		$obj->text = $text;
		$obj->comment_date = $date;
		$this->db->insert_record($table, $obj);
        //обновление актуальной даты сообщения
        $table = "block_guestbook_messages";
		$obj = new object();
		$obj->id = $id;
		$obj->actual_date = $date;
		$res = $this->db->update_record($table, $obj);
		if($res){
			return true;
		}else{
			return false;
		}
	}
	
}
?>